package com.ZMPrinter.Demo;

import com.ZMPrinter.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PrintViaNet_Demo_UHF {
    public static void main(String[] args) throws InterruptedException {

        //region 定义打印机对象
        zmprinter thiszmprinter = new zmprinter();//定义打印机对象
        thiszmprinter.printerinterface= printerstyle.RFID_NET;//打印机接口类型
        thiszmprinter.printerdpi = 300;//打印机分辨率，203dpi、300dpi或600dpi
        thiszmprinter.printSpeed=4;//打印速度，赋值范围2~8，单位是英寸/秒
        thiszmprinter.printDarkness=7;//打印黑度，赋值范围0~20，值越大打印头加热时间越长。一般使用蜡质碳带赋值7~12，树脂碳带赋值12~18
        thiszmprinter.printernetip = "192.168.8.77";//打印机的ip地址，端口号可以不设置，默认是9100
        //endregion

        //region 定义标签对象
        zmlabel thiszmlabel = new zmlabel();//定义标签对象
        thiszmlabel.labelwidth = 75;//标签的宽度，单位是mm
        thiszmlabel.labelheight = 35;//标签的高度，单位是mm
        thiszmlabel.labelrowgap = 2;//标签之间的行间距，单位是mm
        //endregion

        //region 定义标签内需要打印的各个对象（一个标签上可以有多个对象，如文字、一维条码、二维条码、线条、矩形、图片、RFID写入数据等）
        List<zmlabelobject> thiszmlabelobjectlist = new ArrayList<>();//定义标签上需要打印的对象列表

        zmlabelobject thiszmlabelobject01 = new zmlabelobject();
        thiszmlabelobject01.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject01.objectdata = "资产编号：XXXXXXXX";//文字内容
        thiszmlabelobject01.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject01.Yposition = 4;//文字Y坐标，单位mm
        thiszmlabelobject01.textfont = "黑体";//文字的字体
        thiszmlabelobject01.fontstyle = 1;//粗体
        thiszmlabelobject01.fontsize = 10;//文字的字号
        thiszmlabelobjectlist.add(thiszmlabelobject01);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject02 = new zmlabelobject();
        thiszmlabelobject02.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject02.objectdata = "资产名称：办公桌";//文字内容
        thiszmlabelobject02.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject02.Yposition = 11;//文字Y坐标，单位mm
        thiszmlabelobject02.textfont = "宋体";//文字的字体
        thiszmlabelobject02.fontstyle = 1;//粗体
        thiszmlabelobject02.fontsize = 10;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject02);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject03 = new zmlabelobject();
        thiszmlabelobject03.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject03.objectdata = "存放地点：信息部办公室";//文字内容
        thiszmlabelobject03.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject03.Yposition = 18.5f;//文字Y坐标，单位mm
        thiszmlabelobject03.textfont = "宋体";//文字的字体
        thiszmlabelobject03.fontstyle = 1;//粗体
        thiszmlabelobject03.fontsize = 10;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject03);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject04 = new zmlabelobject();
        thiszmlabelobject04.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject04.objectdata = "使用部门：信息部";//文字内容
        thiszmlabelobject04.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject04.Yposition = 26;//文字Y坐标，单位mm
        thiszmlabelobject04.textfont = "宋体";//文字的字体
        thiszmlabelobject04.fontstyle = 1;//粗体
        thiszmlabelobject04.fontsize = 10;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject04);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject05 = new zmlabelobject();
        thiszmlabelobject05.objectName = "barcode";//该对象是条码
        thiszmlabelobject05.objectdata = "12345678";//条码内容
        thiszmlabelobject05.Xposition = 50;//条码X坐标，单位mm
        thiszmlabelobject05.Yposition = 10;//条码Y坐标，单位mm
        thiszmlabelobject05.barcodekind = barcodestyle.QR_Code;//条码的类型
        thiszmlabelobject05.barcodescale = 11;//条码的横向缩放系数，1~99，数字越大条码越宽
        thiszmlabelobjectlist.add(thiszmlabelobject05);//将条码对象添加进对象列表

        zmlabelobject thiszmlabelobject06 = new zmlabelobject();
        thiszmlabelobject06.objectName = "rfiduhf";//该对象是RFID写入
        thiszmlabelobject06.objectdata = "12345678";//RFID需要写入的内容
        thiszmlabelobject06.RFIDDatablock = 0;//写入区域，0为EPC，1为USER
        thiszmlabelobject06.RFIDDatatype = 1;//数据类型：0为文本，1为16进制
        thiszmlabelobject06.RFIDerrortimes = 1;//错误重试次数
        thiszmlabelobjectlist.add(thiszmlabelobject06);//将RFID对象添加进对象列表

/*
        zmlabelobject thiszmlabelobject07 = new zmlabelobject();
        thiszmlabelobject07.objectName = "image";//该对象是图片
        thiszmlabelobject07.Xposition = 53;//X坐标，单位mm
        thiszmlabelobject07.Yposition = 4;//Y坐标，单位mm
        //region 读取图片文件并转为byte[]
        //读取图片文件
        BufferedImage img =null;
        try {
            img = ImageIO.read(new File("C:\\Users\\lkf\\Desktop\\ZMSYS.jpg"));//从文件中读取图片
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(img==null)
            return;
        //BufferedImage转byte[]
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ImageIO.write(img, "png", out);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //endregion
        thiszmlabelobject07.imagedata = out.toByteArray();//添加图片的数据
        thiszmlabelobject07.hscale=0.3f;//图片的横向缩放比例，值为1则不缩放
        thiszmlabelobject07.vscale=0.3f;//图片的竖向缩放比例，值为1则不缩放
        thiszmlabelobjectlist.add(thiszmlabelobject07);//将图片对象添加进对象列表
*/
        //endregion

        //region 打印标签
        long barcodesn = 210900030001L;//文字、条码及EPC的数据
        printutility zmprintoperate = new printutility();//定义打印操作对象

        for(int pnum=1;pnum<=3;pnum++) {
            System.out.println("打印第"+pnum+"张");

            //region 检查打印机状态
            if(!zmprintoperate.CheckNetPrinterStatus(thiszmprinter))
            {
                System.out.println("打印机状态异常，请检查。");
                return;
            }
            //endregion

            //region 更改标签内指定文字、条码或RFID写入数据的内容
            thiszmlabelobject01.objectdata="资产编号："+Long.toString(barcodesn);//更改thiszmlabelobject01对象的objectdata内容
            thiszmlabelobject05.objectdata=Long.toString(barcodesn);//更改thiszmlabelobject05对象的objectdata内容
            thiszmlabelobject06.objectdata=Long.toString(barcodesn);//更改thiszmlabelobject06对象的objectdata内容
            //endregion

            //region 根据标签上需要打印的对象列表生成打印数据
            byte[] zmpclecommand = zmprintoperate.CreateLabelCommand(thiszmprinter, thiszmlabel, thiszmlabelobjectlist);//生成标签数据
            if (zmpclecommand == null) {
                System.out.println("生成标签数据异常为空.");
                return;
            }
            //endregion

            //region 发送打印数据给打印机
            zmprintoperate.PrintLabelCommandbyNet(thiszmprinter, zmpclecommand);//发送数据给打印机
            Thread.sleep(2000);//等待打印完成，根据打印速度和标签高度估算打印时间。如果网络打印，那么需要根据网络路由延迟加大等待时间
            System.out.println(pnum+"张打印完成");
            //endregion

            barcodesn++;//序号加1
        }
        //endregion
    }
}
